אז ככה, אני עובד עם laravel ובניתי מחלקה קטנה לעבודה עם facebook שמבוססת על xfbml עם HTML5
והמחלקה html של laravel3, ככה שב view אני מכניס שורה כזאת:
{{ XFBML::like() }}

ואז מודפס כפתור לייק.
עכשיו אני רוצה לאפשר בפאנל ניהול להפעיל ולכבות את התוסף פייסבוק,
חשבתי לעשות בדיקה ב view אם התוסף פעיל ורק אז להדפיס את הלייק, משהו כזה:
@if( ! XFBML::disabled())
  {{ XFBML::like() }}
@endif

אבל הגעתי למצב שזה מופיע ביותר מדי מקומות וצימצמתי את זה למחלקה, ככה שאם התוסף "מכובה" לא מודפס כלום, ושוב יש אותה בעיה, יש את התנאי הזה ביותר מדי מקומות במחלקה..

יש למישהו רעיון איך אני נותן את התנאי הזה במקום אחד והמחלקה "תפסיק לעבוד"?

חשבתי לתת prefix לשמות של הפונקיות ולקרוא להם בתוך __callStatic בתנאי שהמחלקה פעילה

משהו כזה:
public static function __callStatic($method, $arguments)
{
  if( ! static::disabled()) {
    $method = "enable_prefix_{$method}";
    return call_user_func_array(array(static, $method), $arguments);
  }
}


אבל זאת לא נראת לי דרך לעבוד, זה סתם מכער את המחלקה ואני בטוח שמישהו כבר עבר את הסרט הזה ומצא פתרון יותר טוב..
אז פתרונות נוספים?

6 תשובות

avatar ענה intval ב 14 למאי 2013 #

אופציה נוספת היא לעשות מחלקה נוספת שממשת את אותו אינטרפייס אבל המטודות שלה לא עושות שום דבר ובזמן ריצה להכניס לקונטיינר או מופע של המחלקה הראשונה או של השניה ולהשתמש במופע הזה במקום.

עוד אופציה היא לעטוף את המחלקה XFBML במחלקה נוספת שבה תימצא המטודה __callStatic שכתבת. ככה שבמחלקה האמיתית השמות של המטודות יהיו נורמאליות ולא עם enable_prefix

חוץ מזה, למה שהמטודות יהיו סטטיות?

avatar ענה ldbrgr ב 15 למאי 2013 #

תודה! אני אעטוף את המחלקה במחלקה נוספת.
..המטודות סטטיות כי זה מבוסס על המחלקה HTML של laravel3..

avatar ענה OrelBeY ב 15 למאי 2013 #

לפי איך שזה נשמע לי, אני לא חושב שהמתודות של המחלקה הזאת (XFBML) צריכות להיות סטטיות. הן אמורות לפעול בהתאם להגדרות הייחודיות באותו סקריפט, למשל כתובת URL של מאמר, ולעשות את זה סטטי יהיה פשוט שימוש שגוי מבחינתי.

avatar ענה intval ב 15 למאי 2013 #

גם אם זה מבוסס על מחלקה שהיא כולה סטטית - אין שום סיבה שמחלקה שלך תהיה גם סטטית.
מה מפריכ לך מהמחלקה שלך לקרוא למטודות של מחלקה אחרת, לא משנה אם סטטיות או לא ?
אני בכלל נגד דברים סטטים. לחלוטין.

avatar ענה OrelBeY ב 15 למאי 2013 #

למה, אלכס? אף פעם לא הבנתי את הגישה הזאת שלך. יש מתודות שלא קשורות לאובייקט מסוים, אלא למחלקה עצמה.

avatar ענה intval ב 15 למאי 2013 #

אין כאלה. זה אומר שהם לא צריכות להיות שם, (ברוב המקרים איפה שהם צריכות להיות זה מחלקת factory נפרדת שמייצרת מופעים של המחלקה שלך).
זה אשכול נפרד. לא ארחיב על זה באשכול הנוכחי.